Many software programs are written with a view toward translating them into multiple human languages for multi-cultural distribution (a process known as globalization). One software development platform used for such purpose is the .NET Framework by Microsoft® that provides a large standard library from which software developers can develop assemblies, which are basically code libraries. In the Microsoft® Windows® environment, an assembly takes the form of a process assembly (EXE) or a library assembly (DLL). The code in an assembly is partially compiled into a Common Intermediate Language (CIL), which is then fully compiled into machine language at runtime by a Common Language Runtime (CLR) virtual machine (VM). The standard .NET framework libraries include, among other things, standard classes, a resource manager, and forms.
A challenge for software developers developing software destined for multiple countries is that all the resources (typically text strings) must be extracted from the .NET assembly (or other assembly, such as an Internet-based assembly) so that the strings can be translated into other languages. The .NET Framework includes a standard ResourceManager class that will extract resources from embedded resource files or from satellite assemblies. But a disadvantage to embedded resources is that they are “embedded” into the assembly, which must be compiled with all necessary culture-specific resource files for each target language. In short, each translation requires that the code be recompiled. Corrections to existing resources (such as a typographical error in a string) also undesirably require that the code be recompiled, a time-consuming and error-prone process.
Another undesirable solution is to use satellite assemblies, each compiled for a specific culture. However, changes to resources of a satellite assembly or the development of a new satellite assembly for a new culture would require that the code be recompiled and that one or more configuration files be shipped with the new or modified files. This is necessitated by the fact that recompiling any .NET assembly often introduces incompatibilities between other related assemblies that were not recompiled. Introducing configuration files allows the developer to eliminate any specific incompatibilities that arise; however, producing and deploying these configuration files is a complicated process and creates additional work for the developers. Additionally, for every control in every form in an assembly, the software developer must include additional code that detects the culture and extracts resources from the pre-programmed file locations. This process is very tedious, prone to error, and significantly increases code size.
Thus, a need exists for an improved apparatus and method. The present invention is directed to satisfying one or more of these needs and solving other problems.